testsuite: Don't destroy surfaces that are still used
authorBenjamin Otte <otte@redhat.com>
Thu, 13 Feb 2020 02:23:51 +0000 (03:23 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 13 Feb 2020 05:15:44 +0000 (06:15 +0100)
Coercing the surfaces must not unref the old surface, because the old
surface is going to be saved to a file.

testsuite/gsk/reftest-compare.c
testsuite/reftests/reftest-compare.c

index 84c560cabc0e90b7cb1e3a014d226055e4513396..f63af72419e6ddbfe2b3c8a29ba817830290f8f5 100644 (file)
@@ -61,7 +61,6 @@ coerce_surface_for_comparison (cairo_surface_t *surface,
   cairo_paint (cr);
 
   cairo_destroy (cr);
-  cairo_surface_destroy (surface);
 
   g_assert (cairo_surface_status (coerced) == CAIRO_STATUS_SUCCESS);
 
@@ -152,21 +151,24 @@ reftest_compare_surfaces (cairo_surface_t *surface1,
                           cairo_surface_t *surface2)
 {
   int w1, h1, w2, h2, w, h;
-  cairo_surface_t *diff;
+  cairo_surface_t *coerced1, *coerced2, *diff;
   
   get_surface_size (surface1, &w1, &h1);
   get_surface_size (surface2, &w2, &h2);
   w = MAX (w1, w2);
   h = MAX (h1, h2);
-  surface1 = coerce_surface_for_comparison (surface1, w, h);
-  surface2 = coerce_surface_for_comparison (surface2, w, h);
+  coerced1 = coerce_surface_for_comparison (surface1, w, h);
+  coerced2 = coerce_surface_for_comparison (surface2, w, h);
 
-  diff = buffer_diff_core (cairo_image_surface_get_data (surface1),
-                           cairo_image_surface_get_stride (surface1),
-                           cairo_image_surface_get_data (surface2),
-                           cairo_image_surface_get_stride (surface2),
+  diff = buffer_diff_core (cairo_image_surface_get_data (coerced1),
+                           cairo_image_surface_get_stride (coerced1),
+                           cairo_image_surface_get_data (coerced2),
+                           cairo_image_surface_get_stride (coerced2),
                            w, h);
 
+  cairo_surface_destroy (coerced1);
+  cairo_surface_destroy (coerced2);
+
   return diff;
 }
 
index 84c560cabc0e90b7cb1e3a014d226055e4513396..f63af72419e6ddbfe2b3c8a29ba817830290f8f5 100644 (file)
@@ -61,7 +61,6 @@ coerce_surface_for_comparison (cairo_surface_t *surface,
   cairo_paint (cr);
 
   cairo_destroy (cr);
-  cairo_surface_destroy (surface);
 
   g_assert (cairo_surface_status (coerced) == CAIRO_STATUS_SUCCESS);
 
@@ -152,21 +151,24 @@ reftest_compare_surfaces (cairo_surface_t *surface1,
                           cairo_surface_t *surface2)
 {
   int w1, h1, w2, h2, w, h;
-  cairo_surface_t *diff;
+  cairo_surface_t *coerced1, *coerced2, *diff;
   
   get_surface_size (surface1, &w1, &h1);
   get_surface_size (surface2, &w2, &h2);
   w = MAX (w1, w2);
   h = MAX (h1, h2);
-  surface1 = coerce_surface_for_comparison (surface1, w, h);
-  surface2 = coerce_surface_for_comparison (surface2, w, h);
+  coerced1 = coerce_surface_for_comparison (surface1, w, h);
+  coerced2 = coerce_surface_for_comparison (surface2, w, h);
 
-  diff = buffer_diff_core (cairo_image_surface_get_data (surface1),
-                           cairo_image_surface_get_stride (surface1),
-                           cairo_image_surface_get_data (surface2),
-                           cairo_image_surface_get_stride (surface2),
+  diff = buffer_diff_core (cairo_image_surface_get_data (coerced1),
+                           cairo_image_surface_get_stride (coerced1),
+                           cairo_image_surface_get_data (coerced2),
+                           cairo_image_surface_get_stride (coerced2),
                            w, h);
 
+  cairo_surface_destroy (coerced1);
+  cairo_surface_destroy (coerced2);
+
   return diff;
 }